import createElement from './createElement';
import updateChildren from './updateChildren';

export default function patchVnode(oldVnode, newVnode) {
  // 判断新旧vnode是否是同一个对象
  if (oldVnode === newVnode) return;
  // 判断新vnode有没有text属性
  if (newVnode.text != undefined && (newVnode.children == undefined || newVnode.children.length == 0)) {
    // 新vnode与旧vnode text 属性不一致
    if (newVnode.text != oldVnode.text) {
      // 直接赋值，并同时修改dom
      oldVnode.elm.innerText = newVnode.text;
    }
  } else {
    // 没有text的情况，有没有children
    if (oldVnode.children != undefined && oldVnode.children.length > 0) {
      // 老的有children，新的有children
      updateChildren(oldVnode.elm, oldVnode.children, newVnode.children);
    } else {
      // 老的没有children，新的有children
      // 清空老的节点内容
      oldVnode.elm.innerHtml = '';
      // 遍历新的vnode字节点，创建dom，上树
      for (let i = 0; i < newVnode.children.length; i++) {
        let dom = createElement(newVnode.children[i]);
        oldVnode.elm.appendChild(dom);
      }
    }
  }
}